package 富婆梦.第一阶段.数值操作练习;

/**
 * @ProjectName: java-learning
 * @Package: 富婆梦.第一阶段.数值操作练习
 * @ClassName: PrintByte
 * @Author: hemengjin
 * @Description: 打印每一种数据类型的二进制表现形式
 * 1、printByte（） 打印byte数据类型的二进制形式
 * 2、printInt（） 打印int数据类型的二进制形式
 * 3、printShort（） 打印short数据类型的二进制形式
 * 4、printLong（） 打印long数据类型的二进制形式
 * 5、printChar（） 打印char据类型的二进制形式
 * @Date:2021/10/12 19:33
 * @Version: 1.0
 */
public class PrintByte {
    public static void main(String[] args) {
/*        //测试输出byte类型：
        byte b1 = -1;   //二进制表达为：1111 1111
        byte b2 = 127;  //二进制表达为：0111 1111
        byte b3 = -16;   //二进制表达为：1111 0000
        byte b4 = 15;  //二进制表达为：0000 1111
        printByte(b1);
        printByte(b2);
        printByte(b3);
        printByte(b4);*/

        //测试输出int类型：
/*        int i1 = -1;   //二进制表达为：1111 1111
        int i2 = 127;  //二进制表达为：0111 1111
        int i3 = -16;   //二进制表达为：1111 0000
        int i4 = 15;    //二进制表达为：0000 1111
        printInt(i1);
        printInt(i2);
        printInt(i3);
        printInt(i4);*/

        //测试输出long类型：
/*        long l1 = -1;   //二进制表达为：1111 1111
        long l2 = 127;  //二进制表达为：0111 1111
        long l3 = -16;   //二进制表达为：1111 0000
        long l4 = 15;    //二进制表达为：0000 1111
        printLong(l1);
        printLong(l2);
        printLong(l3);
        printLong(l4);*/

        //测试输出short类型：
/*        short i1 = -1;   //二进制表达为：1111 1111
        short i2 = 127;  //二进制表达为：0111 1111
        short i3 = -16;   //二进制表达为：1111 0000
        short i4 = 15;    //二进制表达为：0000 1111
        printShort(i1);
        printShort(i2);
        printShort(i3);
        printShort(i4);*/

        //测试输出char类型：
        char i1 = 'a';   //二进制表达为：1111 1111
        char i2 = 'b';  //二进制表达为：0111 1111
        char i3 = 'c';   //二进制表达为：1111 0000
        char i4 = '国';    //二进制表达为：0000 1111
        printChar(i1);
        printChar(i2);
        printChar(i3);
        printChar(i4);

    }

    public static void printByte(byte b) {
        // TODO: 把8位长度的byte按照二进制规则打印出来
        int a = 0;
        int x = a | b;
        String str = Integer.toBinaryString(a | b);
        //System.out.println("美化之前:"+str);
        if (str.length() > 8) {
            System.out.println(str.substring(str.length() - 8));
        } else if (str.length() == 8) {
            System.out.println(str);
        } else {
            for (int i = 0; i < 8 - str.length(); i++) {
                System.out.print("0");
            }
            System.out.println(str);
        }
    }

    public static void printInt(int i) {
        // TODO: 把32位长度的int按照二进制规则打印出来
        String str = Integer.toBinaryString(i);
        if (str.length() < 32) {
            for (int x = 0; x < 32 - str.length(); x++) {
                System.out.print("0");
            }
            System.out.println(str);
        }else {
            System.out.println(str);
        }
    }

    public static void printShort(short s) {
        // TODO: 把16位长度的short按照二进制规则打印出来
        int a = 0;
        int x = a | s;
        String str = Integer.toBinaryString(x);
        //System.out.println("美化之前的"+str);
        if (str.length() > 16) {
            System.out.println(str.substring(str.length() - 16));
        } else if (str.length() == 16) {
            System.out.println(str);
        } else {
            for (int i = 0; i < 16 - str.length(); i++) {
                System.out.print("0");
            }
            System.out.println(str);
        }
    }

    public static void printLong(long l) {
        // TODO: 把64位长度的long按照二进制规则打印出来
        String str = Long.toBinaryString(l);
        if (str.length() < 64) {
            for (int i = 0; i < 64 - str.length(); i++) {
                System.out.print("0");
            }
            System.out.println(str);
        }else {
            System.out.println(str);
        }
    }

    public static void printChar(char c) {
        // TODO: 把16位长度的char按照二进制规则打印出来
        int a = 0;
        int x = a | c;
        String str = Integer.toBinaryString(x);
        System.out.println("美化之前的"+str);
        if (str.length() > 16) {
            System.out.println(str.substring(str.length() - 16));
        } else if (str.length() == 16) {
            System.out.println(str);
        } else {
            for (int i = 0; i < 16 - str.length(); i++) {
                System.out.print("0");
            }
            System.out.println(str);
        }
    }
}

